英飞凌Aurix2G TC3XX 芯片内核详解(一) 您所在的位置:网站首页 详解处理器芯片的安全架构设计 英飞凌Aurix2G TC3XX 芯片内核详解(一)

英飞凌Aurix2G TC3XX 芯片内核详解(一)

2024-06-30 14:03| 来源: 网络整理| 查看: 265

英飞凌Aurix2G TC3XX 芯片内核详解(一)——TriCore内核及寄存器介绍

从本文开始,我们将分若干章节介绍TriCore内核架构。本文是该系列文章的第一篇,主要介绍Infineon Aurix2G TC3XX系列芯片内核简介及相关寄存器。

文章目录 英飞凌Aurix2G TC3XX 芯片内核详解(一)——TriCore内核及寄存器介绍1. 芯片及内核介绍2. 内核详解2.1 程序模型(Programming Model)2.1.1 数据及内存2.1.2 寻址模式 2.2 通用寄存器和系统寄存器(General Purpose and System Registers)2.2.1 通用寄存器2.2.2 程序状态信息寄存器(Program State Information Registers)2.2.3 栈管理寄存器2.2.4 系统控制寄存器2.2.5 Core\_ID寄存器 3. 小结参考资料

1. 芯片及内核介绍

计算机内核是指操作系统内核的设计和组织方式,它决定了内核如何管理计算机硬件资源、执行任务调度、处理中断等核心功能。不同的内核使用不同的内核指令集,内核架构也成为指令集架构,比如我们日常使用的计算机(Intel或AMD芯片),使用的就是X86指令集,内核就属于X86架构。常见的还有ARM架构、DSP架构和RISC-V架构。当我们想要掌握某款芯片,基于该芯片进行系统搭建时,就必须要了解该芯片的内核。

嵌入式领域的芯片一般都是精简指令集内核,比如RISC-V、ARM等, **精简指令集(RISC,Reduced Instruction Set Computing)是一种计算机处理器架构设计理念,其核心思想是将处理器的指令集设计得相对较小和简单,以提高执行效率。相对于复杂指令集计算机(CISC)**架构而言,RISC架构强调用更少、更基本的指令来完成操作,并且这些指令的执行时间相对较短。

英飞凌Aurix2G TC3XX系列芯片的内核架构是一种混合架构,同时结合了精简指令集计算机(RISC)和复杂指令集计算机(CISC)的特征,称为TriCore内核架构(以下简称TriCore)。它是一款专门为实时性进行了优化的32位的单核(这里的单核并非指芯片的单核,而是系统架构只涉及一个核,多核之间相互独立,区别于多核架构)嵌入式系统架构。之所以命名为TriCore,是因为其集成了RISC架构、DSP架构和实时系统的技术于一体,形成了兼具三方优势的内核架构。 在这里插入图片描述

TriCore架构采用了RISC-V的高性能load/store数据处理模式,同时具有DSP的数据处理能力。TriCore是32位计算机系统,因此采用32位地址空间,支持可选的虚拟地址空间。下面是TriCore架构的特性:

32位架构

4GB的地址空间

同时支持16位和32位指令,减少代码大小

大多数指令在一个周期内执行

分支指令(使用分支预测)

使用并行数据存储器,实现低中断延迟与快速自动上下文切换

专用接口特定于应用程序的协处理器,以允许添加定制指令

零开销回路功能

双/单时钟周期,16x16位乘法累加单元(可选饱和)

可选浮点单元(FPU)和内存管理单元(MMU)

广泛的位处理能力

单指令多数据(SIMD)打包数据操作(2x16位或4x 8位操作数)

灵活的中断优先级方案

字节和位寻址

数据内存和CPU寄存器的小端字节排序

内存保护

调试支持

本文主要介绍程序模型、通用寄存器和系统寄存器等。中断系统我们已经在之前发布的文章介绍过,上下文保存机制、TRAP系统等我们后续也会专门出文章进行介绍。

2. 内核详解 2.1 程序模型(Programming Model)

该小节主要介绍内核的数据类型、数据格式、存储模式以及地址空间等内容,因为计算机的本质其实是对数据的处理和呈现,因此要理解一款内核,首先要理解其数据的处理模型。

2.1.1 数据及内存

首先我们来看TriCore的数据模型,注意,这里提到的数据模型,是指内核在处理数据时的视角,并非我们C语言中定义数据的视角。TriCore架构支持下面几种数据类型:

Boolean:布尔型,FALSE表示0,TRUE表示1Bit String:布尔串,一段Bit段,用于移位操作Byte:字节,一个字节是8Bit的数据Signed Fraction:有符号的分数,TriCore支持16位、32位、64位的分数Address:地址表示一段32位地址数据(TriCore有专门的地址寄存器,下文会介绍)Signed and Unsigned Integers:又符合和无符号整型,表示32位有、无符号数据IEEE-754 Single-Precision Floating-Point Number:浮点数

TriCore是32位架构,因此大多数指令都是基于32位数据进行处理的,与数据类型相对应,其指令支持的数据格式如下图:

在这里插入图片描述

程序对数据的读取、存储操作是有对齐要求的,见下表:

在这里插入图片描述

同样外设的地址访问也是有对齐要求的:

在这里插入图片描述 TriCore的数据存储使用的是小端对齐,低字节在低地址。

在这里插入图片描述

TriCore是32位内核,因此地址最多支持0xFFFF FFFF,也就是4GB空间大小。因此地址空间的定义被分为16个段(Segments)[0 - F],地址最高位的4个Bit表示段号,每个段256MBytes大小。其中F段被用于外设寄存器地址段。

2.1.2 寻址模式

我们知道,计算机在进行数据计算过程中,需要不断进行数据的读取和存储,这中间有一个重要的流程就是寻址。不同的内核支持不同的寻址模式,TriCore支持的寻址模式如下表:

在这里插入图片描述

Absolute:绝对地址寻址模式,用于外设和全局变量的寻址Base+Offset:基地址加偏移寻址方式,一般用于结构体成员寻址和局部变量的栈寻址Pre-Increment and Pre-Decrement Addressing:预加/预减寻址,一般用于栈的操作Post-Increment and Post-Decrement Addressing:后加/后减寻址,一般用于数据数据的处理指令Circular:循环寻址,一般用于循环操作中Bit-reverse:位翻转寻址,用于FFT算法中 2.2 通用寄存器和系统寄存器(General Purpose and System Registers)

TriCore的内核寄存器包括通用寄存器和系统寄存器,系统寄存器包括程序状态寄存器等。其中系统寄存器的地址是16位内核地址,读写采用的是专用的指令,MTCR(Move To Core Register)和MFCR(Move From Core Register)。

2.2.1 通用寄存器

通用寄存器是计算机体系结构中的寄存器,其设计用途是存储通用数据,而不是特定的数据类型或用途。通用寄存器可以存储整数、浮点数、内存地址等各种数据类型,而不受限于特定的操作或指令。

在许多计算机架构中,通用寄存器用于执行各种操作,如算术运算、逻辑运算、数据移动等。程序员可以使用这些寄存器来存储临时变量、中间计算结果和其他通用数据。通用寄存器的优点在于其灵活性和通用性,允许程序员更自由地使用寄存器来执行各种任务,而不受到特定数据类型或操作的限制。这有助于提高程序的灵活性和性能。

相比于ARM内核,TriCore有两类通用寄存器,包括16个32位数据寄存器(D[0]D[15])和16个32位**地址寄存器**(A[0]A[15])。 在这里插入图片描述

其按照功能有如下几类:

通用寄存器:D[0]D[14]、A[2]A[7]、A[12]~A[14]为真正意义上的通用寄存器A[15]和D[15]为隐式寄存器,32位指令下与通用寄存器功能相同,16位指令下作为默认的寄存器使用A[0]、A[1]、A[8]、A[9]为全局寄存器,在函数调用、中断、异常等场景都不会进行操作A[10]为栈指针寄存器A[11]为返回地址寄存器

数据和地址寄存器的分离促进了算术和内存操作并行执行的高效实现。同时,相邻的两个奇偶寄存器还可以成对进行访问,比如通过E[0]访问由D[0]和D[1]组成的64位数据(D[1]存放高8位),通过P[0]访问由A[0]和A[1]组成的64位地址。

众所周知,在操作系统调度或中断程序切换过程中,系统需要保存上下文,其中主要的内容是保存寄存器。TriCore的通用寄存器分为高上下文和低上下文,高上下文包括A[10]A[15]、D[8]D[15],低上下文包括A[2]A[7]、D[0]D[7]以及A[11],其中仅有返回地址寄存器A[11]在两部分中都存在。A[0]、A[1]、A[8]、A[9]作为全局地址寄存器,不存储在上下文中。

2.2.2 程序状态信息寄存器(Program State Information Registers)

程序状态信息寄存器包含三个寄存器:程序计数器,也就是我们常说的PC指针;程序状态字PSW;前一个上下文信息PCXI。

在这里插入图片描述

PC寄存器为32位程序计数器,反映了程序执行的位置,始终指向下一条即将执行的指令。

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

程序状态字PSW顾名思义,是用来反映程序执行过程中的状态信息。其中:

USB:用户状态位(User Status Bits),用来保存指令执行过程中的副作用位,如溢出信息等,用于后续指令作条件判断

在这里插入图片描述

RES:预留

PRS[2](Bit15)& PRS[1:0](Bit12,Bit13):保护寄存器集切换位(Protection Register Set bit),内存保护寄存器有多套配置,PRS用来选择程序保护寄存器或数据保护寄存器的配置切换

S:安全任务标识符(Safety Task Identifier),标注当前任务是否为安全任务

IO:I/O访问权限级别控制位(Access Privilege Level Control),TriCore内核对于外设寄存器的访问是由权限级别的:

0:User-0 Mode,无权访问外设,在此权限下访问会产生PSE和MPP异常,也无法进行开关中断

1:User-1 Mode,常规访问权限,在此权限下能够访问大部分外设,包括Port口的读写、定时器的读取和大部分I/O状态读取,能够开关中断

2:Supervisor Mode,具有完全的外设访问控制权限

3:Reserved Value

IS:中断栈控制位(Interrupt Stack Control),TriCore内核是有独立的中断栈寄存器ISP的,当进入中断且IS位为0的时候,硬件会先将栈寄存器置为ISP的值,以使用中断的特有栈(当然,在此之前硬件会自动保存SP指针,中断返回后会自动加载回来,不用担心被覆盖),并将IS位置1 。因为是共享栈,如果发生中断嵌套,则不作任何操作,继续往下使用中断栈

GW:全局地址寄存器写权限位,决定是否可写入全局地址寄存器,1表示有权限;全局地址寄存器一般用来指向某个关键的地址区域或关键的数据结构体,比如OS的任务调度控制块等;另外通常A[0]被用于短数据的读取和写入,A[1]也一般为编译器操作预留,A[8]和A[9]未作为编译器预留,一般用于指向系统的关键数据

CDE:调用深度计数使能位(Call Depth Count Enable),TriCore内核是有调用深度检查的,每次调用计数器加1,最大6位计数器,也就是最多支持64层调用(每个Task或者中断具有独立的上下文,因此独立计数),当超过调用上限,会产生异常;将CDE置0,可暂时关闭调用计数,但是在下次Call指令执行时会自动再次打开

CDC:调用深度计数器(Call Depth Counter),调用深度计数器,7个Bit位宽,溢出时产生异常,也可修改CDC降低调用深度上限,比如改为1111100,则4次调度就会产生异常 在这里插入图片描述

前一个上下文信息PCXI用来进行程序的上下文加载,当程序需要返回时,或中断结束调用时,都需要从这个地方向前链接,因此PCXI也称为链接字(Link Word),它和CSA的配合使得TriCore能够实现一套高效的硬件上下文保存机制,下面我们会介绍,这里先看PCXI的内容:

RES:预留

PCPN:前一个CPU中断优先级(Previous CPU Priority Number),在之前关于中断的文章中我们提到过,中断的处理流程的一个步骤,是将ICR.CCPN,也就是当前的CPU中断优先级位,写入到PCPN,也就是本寄存器位中,用于中断环境的保存,中断执行完之后再进行恢复

PIE:先前中断使能位(Previous Interrupt Enable),同PCPN,在中断处理流程中将CPU中断使能状态位ICR.IE,保存到PIE中,用于中断环境保存,中断执行完之后再进行恢复

UL:高、低上下文标签(Upper or Lower Context Tag),1表示高上下文,0表示低上下文

PCXS,PCXO:CSA是存储在内存中的,PCXS和PCXO用于指示存储地址,物理地址有32位,但是实际的内存空间没有这么大的,且CSA是64字节对齐,地址末尾6个为0,所以只需要20位就能指示上下文存储位置,具体算法是Addr=(PCXS



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有